import java.awt.Color;

/**
 *
 * Class: Spel
 * Deze start het programma
 *
 * Lines die je moet aanpassen, als je het aantal hokjes wilt vergroten:
 * Grid: aantal = 3; --> aantal = groter;
 * Spel.Spel (Constructor): this.setSize(400,500); --> this.setSize(groter,groter);
 * Lines die je moet aanpassen, als je de hokjes groter wilt maken:
 * Kamer.tekenKamer.zijde = 50; --> zijde = groter;
 * Grid.Grid.setPreferredSize
 * @author frankkie
 */
public class Spel {

  boolean aandebeurt = false;
  static Color mijnKleur;
  static Color zijnKleur;
  private UI ui;
  private Communicatie comm;
  Grid grid;

  /**
   * Dit start het Programma
   * het maakt een nieuwe instantie van Spel
   * @param args de commandline argumenten
   */
  public static void main(String[] args) {
    System.out.println("Spel.main");
    new Spel();
  }

  /**
   *
   * Constructor Spel
   * maakt een nieuwe Instantie van Spel
   */
  public Spel() {
    System.out.println("Spel.Spel");
    comm = new Communicatie(this);
    //comm = Communicatie.getInstance();
    ui = new UI(this);
    //mijnKleur = Color.green;
    //zijnKleur = Color.red;
  }

  /**
   * Grid instellen
   * @param grid de Instantie van Grid
   */
  public void setGrid(Grid grid) {
    System.out.println("Spel.setGrid");
    this.grid = grid;
  }

  /**
   * Start het spel als Host
   *
   * @see Communicatie
   */
  public void startHost() {
    System.out.println("Spel.startHost");
    comm.startHost();
    comm.start();
    mijnKleur = Color.red;
    zijnKleur = Color.green;
    ui.setStatus("Verbonden met de Client ! Jij bent aan de beurt !");
    setAandebeurt(true);
  }

  /**
   *
   * Start het spel als Client
   * @see Communicatie
   */
  public void startClient() {
    System.out.println("Spel.startClient");
    comm.startClient();
    comm.start();
    mijnKleur = Color.green;
    zijnKleur = Color.red;
    ui.setStatus("Verbonden met de Host ! Host is aan de beurt !");
  }

  /**
   * De tegenstander heeft een muur aangeklikt
   * @see Muur
   * @param muur welke muur, als String
   */
  public void tegenstanderMuurGeklikt(String muur) {
    System.out.println("Spel.tegenstanderMuurGeklikt(" + muur + ")");
    //Informatie Halen
    int k1r = 0;
    int k1c = 0;
    int muurnummer = 0;
    String[] deVars = muur.split(",");
    k1r = Integer.parseInt(deVars[0]);
    k1c = Integer.parseInt(deVars[1]);
    muurnummer = Integer.parseInt(deVars[2]);
    //Muur klike
    System.out.println("k1r = " + k1r + " k1c=" + k1c + " muurnummer=" + muurnummer);
    try {
      grid.kamers[k1r][k1c].getMuur(muurnummer).muurgeklikt();
      System.out.println("tegenstander heeft geklikt :P");
    } catch (Exception exp) {
      //Leegte
      System.out.println("Catch (Spel.tegenstandermuurgeklikt())");
      exp.printStackTrace();
    }
    //Einde Muur Klike
  }

  /**
   * De de waarde van aandebeurt
   * True = ik ben aan de beurt
   * False = tegenspeler aan de beurt
   * @param waarde (boolean) of je wel of niet aan de beurt bent
   */
  public void setAandebeurt(boolean waarde) {
    System.out.println("Spel.setAandebeurt(" + waarde + ")");
    aandebeurt = waarde;

    int[] punten = null;
    if (checkEindeSpel()) {
      punten = grid.telPunten();
      ui.setStatus("Score: " + punten[0] + " - " + punten[1]);
      javax.swing.JOptionPane.showMessageDialog(null, "Score: " + punten[0] + " - " + punten[1] + " (voor jouw)");
      comm.closeConnection();
    }

    if (waarde == true) {
      ui.setStatus("Jij bent aan de Beurt");
    } else {
      ui.setStatus("Jij bent NIET aan de Beurt");
    }
  }

  /**
   * checkt of het spel is afgelopen
   * het spel is afgelopen als alle kamers bezet zijn
   * @see Kamer
   * @return boolean of het spel afgelopen is
   */
  private boolean checkEindeSpel() {
    System.out.println("Spel.checkEindeSpel");
    return grid.alleKamersCompleet();
  }
}
